home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 147
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z
/
Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin
/
tools
/
rb
/
jlcd100.lzh
/
JLCD
/
SAMP
/
JLCDCDC.s
next >
Wrap
Text File
|
1997-12-28
|
13KB
|
736 lines
.include tnb.mac
.include iocscall.mac
.include doscall.mac
.include cdc.mac
.include JLCDCALL.mac
HEAD1 = '*JLC'
HEAD2 = 'DC00'
StartStatio:*******************常駐部
SS:
head:
.dc.l HEAD1
.dc.l HEAD2
.even
BB:
.dc.w 0 *再突入防止
B_KEYSNS:*=========================================
* ($101)[$0404]
* IOCS $01 B_KEYSNS
*
B_KEYSNS_ = $0404
bsr B_KEYSNS_JMP
tst.w BB
beq @f
rts
@@: tst.l d0
beq @f
rts
@@:
move.w #-1,BB
movem.l d0-d7/a0-a6,-(sp)
CDC _CDC_STAT
movea.l d0,a6 * ワーク
* offset
* ( 0) .dc.w 0;NoCD 1;SetCD
* ( 2) .dc.l 状態 0x11;演奏中,0x12;一時停止,0x13;停止
* ( 6) .dc.l 曲番号
* (10) .dc.l 演奏中の曲の経過時間 (MSF型)
* (14) .dc.l CD絶対総 経過時間 (MSF型)
* (18) .dc.l 現在演奏曲のながさ (MSF型)
* (22) .dc.l CD名アドレス
* (26) .dc.l 曲名アドレス
* (30) .dc.l LED文字アドレス -----以下LED部に表示される物
* (34) .dc.l LED数値 曲番号
* (38) .dc.l LED数値 1以上;プログラムナンバー
* 0;表示無し -1;MAX= -2;INP= -3;Vol
* (42) .dc.l LED数値 タイム (MSF型)
* (46) .dc.l LEDの状態
* ┌bit 0 ■:停止
* │bit 1 >:再生
* │bit 2 ||:一時停止
* イズレカ│bit 3 >>:早送り
* └bit 4 <<:巻き戻し
* ┌bit 5 ⊂:オート
* └bit 6 ◯:リピート
* bit 7 R:ランダム
* bit 8 P:メモリー
* (bit 9 B:BGM)
* (50) .dc.b 入力されている数値(上)
* (51) .dc.b 入力されている数値(下)
* (52) .dc.w LED数値 タイム のモード
* 0;ノーマル
* 1;リバース
* 2;トータル
* 3;トータルリバース
* (54) .dc.w Vol数値
* (56) .dc.w MasterVol数値(0ならボリューム機能無し)
lea work_bak,a2
tst.w vw_ff
beq 2f
*---- LCD は元気?!
moveq #0,d2 * 破壊チェック
JLCD _JLCD_INST
tst.l d0
beq 1f
*--破壊されている
2:
move.w #1,vw_ff
lea work_bak_,a2
moveq #1,d2 * CLR !
JLCD _JLCD_INST
1:
moveq #0,d3 * 定数
*===== CD 状態
move.w (a6),d0
cmp.w (a2),d0
beq 8f
*--- 書き替え
tst.w d0
bne @f
*-- CD なし
moveq #$00,d2
lea vw_nc1,a1
JLCD _JLCD_PRINT
moveq #$40,d2
lea vw_nc2,a1
JLCD _JLCD_PRINT
bra 9f
@@:
lea work_bak_,a2
moveq #$00,d2
lea vw_ncd,a1
JLCD _JLCD_PRINT
moveq #$40,d2
lea vw_ncd,a1
JLCD _JLCD_PRINT
8: *===== 曲番号
move.l 34(a6),d0
cmp.l 34(a2),d0
beq 8f
*--- 書き替え
lea vwork,a1
bsr itoa3
clr.b 3(a1)
moveq #$4C,d2
JLCD _JLCD_PRINT
8: *===== '=' 等表示
move.l 38(a6),d0
cmp.l 38(a2),d0
beq 8f
*--- 書き替え
tst.l d0
bmi 2f
bne 1f
*---- 消す
moveq #$0B,d2
lea vw_nul,a1
JLCD _JLCD_PRINT
moveq #$48,d2
lea vw_nul,a1
JLCD _JLCD_PRINT
bra 8f
1: *--- P ナンバー
lea vwork+2,a1
move.w #'P=',-2(a1)
bsr itoa2
lea vwork,a1
clr.b 4(a1)
moveq #$0B,d2
JLCD _JLCD_PRINT
lea vw_nul,a1
moveq #$48,d2
JLCD _JLCD_PRINT
bra 8f
2: *--- 数字意味表示
neg.l d0
mulu #5,d0
lea vw_nul,a1
adda.l d0,a1
moveq #$48,d2
JLCD _JLCD_PRINT
8: *===== 時間
move.l 42(a6),d0
andi.l #$00FFFF00,d0
move.l 42(a2),d1
andi.l #$00FFFF00,d1
cmp.l d1,d0
beq 8f
*--- 書き替え
lea vwork,a1
move.b #':',3(a1)
clr.b 6(a1)
swap d0
andi.l #$00FF,d0
bsr itoa3
move.b 42+2(a6),d0
lea vwork+4,a1
bsr itoa2
lea vwork,a1
moveq #$03,d2
JLCD _JLCD_PRINT
8: *====== LED の状態
move.l 46(a6),d0
cmp.l 46(a2),d0
beq 8f
*--- 書き替え
lea vw_led0,a4 * 左のアイコン
lea vw_led0,a5 * 右のアイコン
move.l d0,d7
beq 7f
btst.l #0,d7
beq @f
*--- bit 0
lea vw_led1,a4 * 左のアイコン *停止
lea vw_max,a1
moveq #$48,d2
JLCD _JLCD_PRINT
@@: *--- bit 1
btst.l #1,d7
beq @f
lea vw_led1+8*1,a4 * 左のアイコン *再生
lea vw_nul,a1
moveq #$48,d2
JLCD _JLCD_PRINT
@@: *--- bit 2
btst.l #2,d7
beq @f
lea vw_led1+8*2,a4 * 左のアイコン *一時停止
@@: *--- bit 3
btst.l #3,d7
beq @f
lea vw_led1+8*3,a4 * 左のアイコン *はや送り
bra 1f
@@: *--- bit 4
btst.l #4,d7
beq @f
lea vw_led1+8*4,a4 * 左のアイコン *まき戻し
1:
@@: *--- bit 5
btst.l #5,d7
beq @f
lea vw_led2,a5 * 右のアイコン *オート
@@: *--- bit 6
btst.l #6,d7
beq @f
lea vw_led2+8,a5 * 右のアイコン *
@@: *---
7:
moveq #4,d2
movea.l a4,a1 * 左のアイコン
JLCD _JLCD_FONT
moveq #5,d2
movea.l a5,a1 * 右のアイコン
JLCD _JLCD_FONT
lea vwork,a1
move.w #$0400,(a1)
moveq #$00,d2
JLCD _JLCD_PRINT
move.l #$05200000,(a1)
moveq #$40,d2
JLCD _JLCD_PRINT
*--- bit 7
lea vwork,a1
btst.l #7,d7
beq @f
move.w #'R'*$100,(a1)
bra 1f
@@: move.w #' '*$100,(a1)
1:
moveq #$4F,d2
JLCD _JLCD_PRINT
*--- bit 8
lea vwork,a1
btst.l #8,d7
beq @f
move.w #'P'*$100,(a1)
bra 1f
@@: move.w #' '*$100,(a1)
1:
moveq #$0F,d2
JLCD _JLCD_PRINT
8: *---- TIME MODE
move.w 52(a6),d0
cmp.w 52(a2),d0
beq 8f
*-- 書き替え
add.w d0,d0
add.w d0,d0
lea vw_tm,a1
adda.w d0,a1
moveq #$01,d2
JLCD _JLCD_PRINT
8:
9: *---- 今の状態を記憶して終わり
lea work_bak,a2
move.l (a6),(a2)
moveq #(56-32)/4-1,d0
adda.l #32,a6
adda.l #32,a2
@@: move.l (a6)+,(a2)+
dbra d0,@b
movem.l (sp)+,d0-d7/a0-a6
clr.w BB
rts
B_KEYSNS_JMP:
move.l B_KEYSNS_JPT(pc),-(sp)
rts
B_KEYSNS_JPT:
.dc.l 0
*******-------------------*******
itoa3:
move.l d0,-(sp)
*--100の位
divu #100,d0
tst.w d0
beq @f
ori.w #$0030,d0
move.b d0,(a1)
bra 1f
@@: move.b #' ',(a1)
1: *--10,1の位
swap d0
andi.l #$000FFFF,d0
divu #10,d0
ori.l #$00300030,d0
move.b d0,1(a1)
swap d0
move.b d0,2(a1)
move.l (sp)+,d0
rts
itoa2:
move.l d0,-(sp)
*--10,1の位
divu #10,d0
ori.l #$00300030,d0
move.b d0,0(a1)
swap d0
move.b d0,1(a1)
move.l (sp)+,d0
rts
*0123456789ABCDEF
vw_nc1: .dc.b ' [CDC] (C)TNB ',0
vw_nc2: .dc.b ' - NOCD - ',0
vw_ncd: .dc.b ' ',0
.even
vw_nul: .dc.b ' ',0
vw_max: .dc.b 'MAX=',0
vw_inp: .dc.b 'INP=',0
vw_vol: .dc.b 'VOL=',0
vwork:
.ds.b 256
.even
work_bak:
.ds.b 56
.even
work_bak_:
.dc.w 8
.dcb.b 56,-1
.even
vw_ff:
.dc.w 0
vw_tm:
.dc.b ' ',0,0
.dc.b 'Rv',0,0
.dc.b 'To',0,0
.dc.b 'TR',0,0
vw_led0:
.dc.b %000_00000 *
.dc.b %000_00000
.dc.b %000_00000
.dc.b %000_00000
.dc.b %000_00000
.dc.b %000_00000
.dc.b %000_00000
.dc.b %000_00000
vw_led1:
.dc.b %000_00000 *
.dc.b %000_11111
.dc.b %000_11111
.dc.b %000_11111
.dc.b %000_11111
.dc.b %000_11111
.dc.b %000_00000
.dc.b %000_00000
.dc.b %000_00000 *
.dc.b %000_11000
.dc.b %000_11110
.dc.b %000_11111
.dc.b %000_11110
.dc.b %000_11000
.dc.b %000_00000
.dc.b %000_00000
.dc.b %000_00000 *
.dc.b %000_11011
.dc.b %000_11011
.dc.b %000_11011
.dc.b %000_11011
.dc.b %000_11011
.dc.b %000_00000
.dc.b %000_00000
.dc.b %000_00000 *
.dc.b %000_10100
.dc.b %000_01010
.dc.b %000_00101
.dc.b %000_01010
.dc.b %000_10100
.dc.b %000_00000
.dc.b %000_00000
.dc.b %000_00000 *
.dc.b %000_00101
.dc.b %000_01010
.dc.b %000_10100
.dc.b %000_01010
.dc.b %000_00101
.dc.b %000_00000
.dc.b %000_00000
vw_led2
.dc.b %000_00000 *
.dc.b %000_01110
.dc.b %000_10000
.dc.b %000_10000
.dc.b %000_10010
.dc.b %000_01111
.dc.b %000_00010
.dc.b %000_00000
.dc.b %000_00100 *
.dc.b %000_01110
.dc.b %000_00101
.dc.b %000_10001
.dc.b %000_10100
.dc.b %000_01110
.dc.b %000_00100
.dc.b %000_00000
EndStatio:*******************常駐部
MarkerChk:*----------------------------------------
* a0 アドレス
*
*[戻り値] bne ちがう
* beq あっている
cmpa.l #$F0000000,a0
bcc @f
cmp.l #HEAD1,(a0)
bne @f
cmp.l #HEAD2,4(a0)
bne @f
cmpa.l a0,a0 *z=1
@@:
rts
InvChk:*----------------------------------------
* a0.l==なら非常駐
* a0.l!=なら常駐
movea.l (a0),a0 *一つ前のポインタ
cmpa.l #$F0000000,a0
bcc IC1
cmp.l #HEAD1,$0100+(head-SS)(a0)
bne @f
cmp.l #HEAD2,$0104+(head-SS)(a0)
bne @f
adda.l #$100,a0 **[SS]のポインタ
rts
@@: **違う
tst.l (a0) *一つ前のポインタ
bne InvChk *0でない(上へ)
IC1: sub.l a0,a0 *非常駐
rts
AtoI:*----------------------------------------
* a2 アドレス
*[戻り値] d0.l 数字
moveq #0,d0
move.b (a2),d2
cmpi.b #'$',d2
jbeq AtoHI
@@: move.b (a2)+,d2
subi.b #'0',d2
jbcs AIr
cmpi.b #9,d2
jbhi AIr
andi.l #$0000FF,d2
mulu #10,d0
add.l d2,d0
jbra @b
AIr: subq #1,a2
rts
AtoHI:
*(Hex専用)
move.b (a2)+,d2 *$ skip
@@: move.b (a2)+,d2
subi.b #'0',d2
jbcs AHIL1
cmpi.b #9,d2
jbhi AHIL1
lsl.l #4,d0
add.l d2,d0
jbra @b
AHIL1:
ori.b #$20,d2
subi.b #'a'-'0',d2
jbcs AHIL2
cmpi.b #5,d2
jbhi AHIL2
lsl.l #4,d0
addi.l #10,d0
add.l d2,d0
jbra @b
AHIL2: subq #1,a2
rts
clcf: .dc.w 0
cmdlinchk:*------------------------------------------------------------------
* in a2 = 文字列
* out d0.b 0 ; OK
* -1 ; LINEERR
* -2 ; COMDERR
* -100; その他
* 'h' ; -?
* 'h' ; -H
* 'r' ; -R
*
clr.w clcf
bra sw
cmdlinchkD: ** DEVICE エントリ用
move.w #-1,clcf
sw: move.b (a2)+,d0
bne 1f
*======終わり?
tst.w clcf
bne @f
*======COMLINE からなので終わり
moveq #0,d0
rts
@@: *====== DEVICE
move.b (a2),d0
bne sw
moveq #0,d0 * 0が連続なので終わり
rts
1:
cmpi.b #' ',d0
beq sw
cmpi.b #$09,d0 *tab
beq sw
cmpi.b #'-',d0
beq swc
cmpi.b #'/',d0
beq swc
swe: *======コマンドラインが異常
moveq #-1,d0
rts
swc:
*======スイッチ判断
move.b (a2)+,d0
beq swe
cmpi.b #'?',d0
bne @f
moveq #'h',d0
rts
@@:
ori.b #$20,d0 *小文字化!
cmpi.b #'r',d0
beq clcrts
cmpi.b #'h',d0
beq clcrts
@@:
moveq #-2,d0
clcrts:
rts
init:*------------------------------------------------------------------
move.l a0,ExA0
Print LR1(pc)
** 常駐チェック **
suba.l a1,a1
SUPER
movea.l d0,a1
moveq #0,d1
bsr InvChk
movea.l a0,a3 *常駐先頭アドレス
movea.l B_KEYSNS_,a0
suba.l #B_KEYSNS-head,a0
jbsr MarkerChk
jbne @f
bset #0,d1
@@:
*d1に常駐状態
.if 0
** 常駐していたらそのデータを引用 **
move.l a3,d0
beq conl
lea __COM__-SS(a3),a0
lea __COM__,a6
move.l #(__COM__S-__COM__)/2-1,d0
@@: move.w (a0)+,(a6)+
dbra d0,@b
.endif
conl:
tst.b (a2)+ *スキップ
bsr cmdlinchk *a2 に文字列もって bsr
tst.b d0
bne 1f
bra keep
1:
cmpi.b #-100,d0
bne @f
DOS _EXIT
@@:
cmpi.b #-1,d0
bne @f
pea LR6(pc)
bra PE *end
@@:
cmpi.b #'r',d0
beq free
cmpi.b #'h',d0
beq help
pea LR7(pc) * -2 もここだ!
bra PE *end
help:
pea LRH(pc)
bra PE *end
keep: ************************** 常駐させる
move.l a3,d0
beq keepL1
*既に常駐、設定変更
.if 0
lea __COM__-SS(a3),a0
lea __COM__,a6
move.l #(__COM__S-__COM__)/2-1,d0
@@: move.w (a6)+,(a0)+
dbra d0,@b
.endif
move.w MC(pc),d0
bne @f
pea LR5(pc)
bra PE *end
@@: pea LR5_(pc)
bra PE *end
keepL1:
*==============セット
*---- CDC はある?
_CDC_CHK_S
bne @f
pea LRNC(pc)
bra PE *end
@@: *---- JLCD はある?
JLCD _JLCD_VER
cmpi.w #$4A4C,d0
beq @f
pea LRNJ(pc)
bra PE *end
@@:
*---- JLCD は時計?!
moveq #-1,d2 * チェック
JLCD _JLCD_INIT
tst.l d0
beq @f
pea LRNE(pc) * アプリが使っている
bra PE *end
@@:
bsr keepdisp
*---- JLCD を占領?!
moveq #1,d2 * 占領
JLCD _JLCD_INIT
*---
Print LRKP(pc)
clr.w -(sp)
move.l #EndStatio-StartStatio,d0
move.l d0,-(sp)
DOS _KEEPPR
keepdisp:***************
move.l B_KEYSNS_,B_KEYSNS_JPT
move.l #B_KEYSNS,B_KEYSNS_
rts
free: *****************************常駐解除
move.l a3,d0
bne @f
pea LR8(pc) **非常駐
bra PE *end
@@:
cmpi.w #$01,d1
beq @f
pea LR4(pc) **ベクタが占領
bra PE *end
@@:
move.l (B_KEYSNS_JPT-SS)(a3),B_KEYSNS_
*---- JLCD を時計に戻す
moveq #0,d2 * 占領
JLCD _JLCD_INIT
@@: *--
sub.l #$00000F0,a3
move.l a3,-(sp)
DOS _MFREE
addq.l #4,sp
pea LR3(pc)
PE: DOS _PRINT
addq.l #4,sp
DOS _EXIT
*------------------------------------------*
ExA0: .dc.l 0
MC: .dc.w 0 *モードをいじった
LR2: .dc.b ' 「白窓君」に CDC の LED を表示します。',$0d,$0a,0
LRKP: .dc.b ' 常駐しました。',$0d,$0a,0
LR3: .dc.b ' 常駐解除しました。',$0d,$0a,0
LR4: .dc.b ' ベクタが占領されています。',$0d,$0a,0
LR5: .dc.b ' 既に常駐しています。',$0d,$0a,0
LR5_: .dc.b ' 設定を変更しました。 ',$0d,$0a,0
LR6: .dc.b ' コマンドラインが異常です。',$0d,$0a,0
LR7: .dc.b ' スイッチが異常です。',$0d,$0a,0
LR8: .dc.b ' 常駐していません。',$0d,$0a,0
LRNC: .dc.b ' CDC.x が常駐していないか、trap #5 が使えません。',$0d,$0a,0
LRNJ: .dc.b ' 「白窓君」DRIVER がありません。',$0d,$0a,0
LRNE: .dc.b ' 「白窓君」は他のアプリが占領しています。',$0d,$0a,0
LRCN: .dc.b ' CONFIG.SYSで登録されています。',$0d,$0a
.dc.b ' 常駐解除できません。',$0d,$0a,0
.even
LRH: .dc.b $0d,$0a
.dc.b '使用法:JLCDCDC.x [switch] ',$0d,$0a
.dc.b ' /R ・・・・・・・・ 常駐解除します。',$0d,$0a
.dc.b $0d,$0a
.dc.b 0
.even
LR1: .dc.b 'X68k 「白窓君」 CDC LED Version 1.00 Copyright 1997 TNB製作所'
CRLF: .dc.b $0d,$0a,0
.even
.end init